package com.ruoyi.system.utils;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.pay.MyWxMiniConfig;
import com.ruoyi.common.utils.AesUtil;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.system.domain.vo.WxUserInfoVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Component
public class WxUtils {

    @Autowired
    private MyWxMiniConfig myWxMiniConfig;

    /**
     * 只会返回openid unionid sesionKey
     * @param jsCode
     * @return
     */
    public WxUserInfoVo getSessionKey(String jsCode){
        //小程序唯一标识   (在微信小程序管理后台获取)
        String wxspAppid = myWxMiniConfig.getAppid();
        //小程序的 app secret (在微信小程序管理后台获取)
        String wxspSecret = myWxMiniConfig.getSecret();
        //授权（必填）  一般都是这个 可不用改
        String grant_type = "authorization_code";
        //请求参数
        String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + jsCode + "&grant_type=" + grant_type;
        //发送请求
        String sr = HttpUtils.sendGet("https://api.weixin.qq.com/sns/jscode2session", params);
        //解析相应内容（转换成json对象）
        WxUserInfoVo infoVo = JSONObject.parseObject(sr,WxUserInfoVo.class);

        return infoVo;
    }

    public WxUserInfoVo WxGetUserInfo(String data, String iv, String jsCode){
        try {		//调用工具给上面的三个参数，这些参数前端都可以给

            WxUserInfoVo temp = getSessionKey(jsCode);

            String result = AesUtil.decrypt(data, temp.getSession_key(), iv,"UTF-8");
            if (null != result && result.length() > 0) {
                //不知道为啥解析不出来PhoneNumber
                WxUserInfoVo userInfoVo = JSONObject.parseObject(result,WxUserInfoVo.class);

                JSONObject jsonObject = JSONObject.parseObject(result);
                if (jsonObject.containsKey("phoneNumber")){
                    userInfoVo.setPhoneNumber(jsonObject.getString("phoneNumber"));
                }
                userInfoVo.setOpenid(temp.getOpenid());
                userInfoVo.setUnionid(temp.getUnionid());
                return userInfoVo;
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  null;
    }



}
